<h1 id="nethogs">nethogs</h1>
<p>终端下的网络流量监控工具</p>
<h2 id="补充说明">补充说明</h2>
<p>有很多适用于Linux系统的开源网络监视工具。比如说，你可以用命令iftop来检查带宽使用情况。netstat用来查看接口统计报告，还有top监控系统当前运行进程。但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具，那么NetHogs值得一看。</p>
<p><strong>NetHogs</strong> 是一个开源的命令行工具（类似于Linux的top命令），用来按进程或程序实时统计网络带宽使用率。</p>
<p>来自NetHogs项目网站:</p>
<blockquote>
<p>NetHogs是一个小型的net top工具，不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组。NetHogs不需要依赖载入某个特殊的内核模块。如果发生了网络阻塞你可以启动NetHogs立即看到哪个PID造成的这种状况。这样就很容易找出哪个程序跑飞了然后突然占用你的带宽。</p>
</blockquote>
<p>本文为你介绍如何在Unix/Linux操作系统下如何安装和使用NetHogs按进程监控网络带宽使用率。</p>
<h3 id="语法">语法</h3>
<pre><code class="language-bash">nethogs（选项）（参数）</code></pre>
<h3 id="选项">选项</h3>
<div class="sourceCode" id="cb2"><pre><code class="language-bash"><a class="sourceLine" id="cb2-1" data-line-number="1"><span class="ex">usage</span>: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]]</a>
<a class="sourceLine" id="cb2-2" data-line-number="2">  <span class="ex">-V</span> : 打印版本。</a>
<a class="sourceLine" id="cb2-3" data-line-number="3">  <span class="ex">-h</span> : 打印此帮助。</a>
<a class="sourceLine" id="cb2-4" data-line-number="4">  <span class="ex">-b</span> : bughunt模式 - 暗示tracemode。</a>
<a class="sourceLine" id="cb2-5" data-line-number="5">  <span class="ex">-d</span> : 延迟更新刷新率（以秒为单位）。 默认值为1。</a>
<a class="sourceLine" id="cb2-6" data-line-number="6">  <span class="ex">-v</span> : 视图模式（0 = KB / s，1 =总KB，2 =总B，3 =总MB）。 默认值为0。</a>
<a class="sourceLine" id="cb2-7" data-line-number="7">  <span class="ex">-c</span> : 更新次数。 默认为0（无限制）。</a>
<a class="sourceLine" id="cb2-8" data-line-number="8">  <span class="ex">-t</span> : tracemode.</a>
<a class="sourceLine" id="cb2-9" data-line-number="9">  <span class="ex">-p</span> : 煽动混乱模式（不推荐）。</a>
<a class="sourceLine" id="cb2-10" data-line-number="10">  <span class="ex">-s</span> : 按发送列排序输出。</a>
<a class="sourceLine" id="cb2-11" data-line-number="11">  <span class="ex">-a</span> : 监控所有设备，甚至环回/停止。</a>
<a class="sourceLine" id="cb2-12" data-line-number="12">  <span class="ex">device</span> : 要监控的设备。 默认是所有接口启动和运行，不包括环回</a>
<a class="sourceLine" id="cb2-13" data-line-number="13"></a>
<a class="sourceLine" id="cb2-14" data-line-number="14">当<span class="ex">nethogs</span>运行时，按：</a>
<a class="sourceLine" id="cb2-15" data-line-number="15">  <span class="ex">q</span>：退出</a>
<a class="sourceLine" id="cb2-16" data-line-number="16">  <span class="ex">s</span>：按SENT流量排序</a>
<a class="sourceLine" id="cb2-17" data-line-number="17">  <span class="ex">r</span>：按RECEIVE流量排序</a>
<a class="sourceLine" id="cb2-18" data-line-number="18">  <span class="ex">m</span>：在总（KB，B，MB）和KB / s模式之间切换</a></code></pre></div>
<p>其他参数和用法</p>
<pre><code class="language-bash">-d : 刷新间隔
-h : 帮助
-p : promiscious 模式
-t : trace模式 
-V : 版本</code></pre>
<p><strong>交互命令</strong></p>
<p>以下是NetHogs的一些交互命令（键盘快捷键）</p>
<ul>
<li>m : 修改单位</li>
<li>r : 按流量排序</li>
<li>s : 按发送流量排序</li>
<li>q : 退出命令提示符</li>
</ul>
<h3 id="安装">安装</h3>
<p><strong>在RHEL、CentOS和Fedora下安装NetHogs</strong></p>
<p>要安装NetHogs，你必须要启用你所用Linux下的EPEL源。然后运行下面的yum命令下载安装NetHogs包。</p>
<pre><code class="language-bash"># yum install nethogs</code></pre>
<p><strong>在Ubuntu、Linux mint和Debian下安装NetHogs</strong></p>
<p>键入apt-get命令安装NetHogs包：</p>
<pre><code class="language-bash">$ sudo apt-get install nethogs</code></pre>
<h3 id="nethogs用法">NetHogs用法</h3>
<p>在基于RedHat系统下键入如下命令启动NetHogs工具。</p>
<pre><code class="language-bash"># nethogs
</code></pre>
<p>在Debian/Ubuntu/Linux Mint下要执行NetHogs你必须拥有root权限：</p>
<pre><code class="language-bash">$ sudo nethogs
</code></pre>
<p>!nethogs</p>
<p>Ubuntu 12.10 下的NetHogs预览</p>
<p>正如上图所示，send列和received列显示的是按照每个进程的流量统计。总的收发数据带宽在最下方，而且可以用交互命令控制排序，下面将要讨论这些交互命令。</p>
<h3 id="nethogs-命令行参数">NetHogs 命令行参数</h3>
<p>以下就是NetHogs命令行的参数，用-d来添加刷新频率参数，device name 用来检测给定的某个或者某些设备的带宽（默认是eth0）。例如：设置5秒钟的刷新频率，键入如下命令即可：</p>
<pre><code class="language-bash"># nethogs -d 5
</code></pre>
<pre><code class="language-bash">$ sudo nethogs -d 5
</code></pre>
<p>如果只用来监视设备（eth0）的网络带宽可以使用如下命令：</p>
<pre><code class="language-bash"># nethogs eth0
</code></pre>
<pre><code class="language-bash">$ sudo nethogs eth0
</code></pre>
<p>如果要同时监视eth0和eth1接口，使用以下命令即可：</p>
<pre><code class="language-bash"># nethogs eth0 eth1
</code></pre>
<pre><code class="language-bash">$ sudo nethogs eth0 eth1
</code></pre>
<p>关于NetHogs命令行工具的完整参数列表，可以参考NetHogs的手册，使用方法是在终端里输入<code>man nethogs</code>或者<code>sudo man nethogs</code>，更多信息请参考NetHogs项目主页。</p>
<!-- Linux命令行搜索引擎：https://jaywcjlove.github.io/linux-command/ -->
